#!/bin/bash

# 爬虫状态检查脚本
# 用法: ./status_spider.sh [spider_name]
# 例如: ./status_spider.sh nfpa
# 如果不指定爬虫名称，将显示所有爬虫状态

# 如果没有参数，显示所有爬虫状态
if [ $# -eq 0 ]; then
    echo "检查所有爬虫状态..."
    echo "=================="
    
    # 查找所有 .pid 文件
    for pid_file in *.pid; do
        if [ -f "$pid_file" ]; then
            spider_name=$(basename "$pid_file" .pid)
            pid=$(cat "$pid_file")
            
            if ps -p $pid > /dev/null 2>&1; then
                echo "✅ $spider_name: 运行中 (PID: $pid)"
            else
                echo "❌ $spider_name: 已停止 (PID: $pid - 进程不存在)"
                echo "   清理过期的 PID 文件..."
                rm -f "$pid_file"
            fi
        fi
    done
    
    # 检查是否有任何 PID 文件
    if ! ls *.pid > /dev/null 2>&1; then
        echo "没有找到任何爬虫进程"
    fi
    
    exit 0
fi

SPIDER_NAME=$1
PID_FILE="${SPIDER_NAME}.pid"
LOG_FILE="${SPIDER_NAME}.log"

echo "检查爬虫状态: $SPIDER_NAME"
echo "=================="

# 检查 PID 文件是否存在
if [ ! -f "$PID_FILE" ]; then
    echo "❌ 爬虫 $SPIDER_NAME 没有在运行"
    echo "   PID 文件不存在: $PID_FILE"
    exit 1
fi

# 读取 PID
PID=$(cat "$PID_FILE")

# 检查进程是否存在
if ps -p $PID > /dev/null 2>&1; then
    echo "✅ 爬虫 $SPIDER_NAME 正在运行"
    echo "   PID: $PID"
    echo "   日志文件: $LOG_FILE"
    
    # 显示进程信息
    echo "   进程信息:"
    ps -p $PID -o pid,ppid,cmd,etime
    
    # 显示日志文件最后几行
    if [ -f "$LOG_FILE" ]; then
        echo "   最新日志 (最后 5 行):"
        tail -5 "$LOG_FILE" | sed 's/^/   /'
    fi
else
    echo "❌ 爬虫 $SPIDER_NAME 已停止"
    echo "   PID: $PID (进程不存在)"
    echo "   清理过期的 PID 文件..."
    rm -f "$PID_FILE"
    exit 1
fi 